package com.yehebl.orm.data.common.dao;

import java.util.Map;

import com.yehebl.orm.data.common.xml.AQueryXmlSql;

/**
 * 查询单个实体接口
 */
public interface IEntityDao {

    /**
     * id获取对象
     *
     * @param id    主键
     * @param clazz 返回的类
     */
    <T> T get(Object id, Class<T> clazz);

    /**
     * sql获取对象
     *
     * @param sql   执行的sql ?代表参数
     * @param clazz 返回的类型
     * @param objs  参数
     */
    <T> T getBySql(String sql, Class<T> clazz, Object... objs);

    /**
     * @param sqlName     xml中的name
     * @param clazz       返回的类
     * @param queryXmlSql 查询条件
     * @return 返回单类
     */
    <T> T getBySqlName(String sqlName, AQueryXmlSql queryXmlSql, Class<T> clazz);

    /**
     * @param sqlName xml中的name
     * @param clazz   返回的类
     * @return 返回单类
     */
    <T> T getBySqlName(String sqlName, Class<T> clazz);

    /**
     * 获取数据第一条
     *
     * @param sqlName     xml中的name
     * @param queryXmlSql 处理sql的对象
     * @param clazz       返回的类
     */
    <T> T getOneBySqlName(String sqlName, AQueryXmlSql queryXmlSql, Class<T> clazz);

    /**
     * 获取数据第一条
     *
     * @param sqlName xml中sql的name
     * @param clazz   返回的类
     */
    <T> T getOneBySqlName(String sqlName, Class<T> clazz);

    /**
     * 获取单条数据
     *
     * @param expression 表达式
     * @param value      值
     */
    <T> T getByExpression(String expression, Object value, Class<T> clazz);

    /**
     * 根据条件获取一条数据
     *
     * @param params 参数
     */
    <T> T getByMap(Map<String, Object> params, Class<T> clazz);

    /**
     * 获得第一条数据
     *
     * @param params 参数
     * @param clazz  返回的类
     */
    <T> T getOneByMap(Map<String, Object> params, Class<T> clazz);

}
